package 每日一题OJ;

import java.util.*;

/**
 * @author shy_black
 * @date 2019/3/27 22:29
 * @Description: 按照加法按位相加再加进位思想循环完成相加的任务
 * 链接：https://www.nowcoder.com/questionTerminal/ed85a09f0df047119e94fb3e5569855a
 * 来源：牛客网
 * <p>
 * 有两个用链表表示的整数，每个结点包含一个数位。这些数位是反向存放的，也就是个位排在链表的首部。编写函数对这两个整数求和，并用链表形式返回结果。
 * <p>
 * 给定两个链表ListNode* A，ListNode* B，请返回A+B的结果(ListNode*)。
 * <p>
 * 测试样例：
 * {1,2,3},{3,2,1}
 * 返回：{4,4,4}
 *
 *
 */
public class 链式A加B {
}

class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }

    public ListNode plusAB(ListNode a, ListNode b) {
        // write code here
        if (a == null) {
            return b;
        }
        if (b == null) {
            return a;
        }
        ListNode c = new ListNode(-1);
        ListNode res = c;
        int temp = 0;
        while (a != null || b != null || temp != 0) {
            if (a != null) {
                temp = temp + a.val;
                a = a.next;
            }
            if (b != null) {
                temp = temp + b.val;
                b = b.next;
            }
            res.next = new ListNode(temp % 10);
            res = res.next;
            temp /= 10;

        }
        return c.next;
    }
}